<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .box {
        width: 100px;
        height: 100px;
        background: red;
      }
    </style>
  </head>
  <body>
    <div class="box"></div>
    <script>
      // #ES5的；
      // 改变this指向 ；
      // call / apply /bind
      function fn(a, b) {
        console.log(this, a, b);
      }

      document.querySelector(".box").onclick = function () {
        //   fn(this);
        // fn.call(this);
        // 方式一：通过call来执行fn函数改变fn函数内部的this指向；
        // let obj = {
        //     name:"张三"
        // }
        // // fn.call(obj,1,2)

        // // 方式二：通过apply来执行fn 从而改变fn函数内部的指向；
        // function test(){
        //     fn.apply(obj,arguments);
        // }
        // test(1,2);

        // 方式三：bind
        let obj = {
          name: "张三",
        };
        fn.bind(obj)(a, b);
      };

      // 精确判断数据类型；
      var arr = [];
      var obj = {};
      var reg = /a/;
      var bool = true;
      // console.log(typeof arr)
      // console.log(typeof obj)
      // console.log(typeof reg)

      // 精确判断数据类型
      console.log(Object.prototype.toString.call(arr) === "[object Array]");
      console.log(Object.prototype.toString.call(obj) === "[object Object]");
      console.log(Object.prototype.toString.call(reg) === "[object RegExp]");
      console.log(Object.prototype.toString.call(bool));
      console.log(Object.prototype.toString.call(undefined));
    </script>
  </body>
</html>
